// 1. 导入三方的网络请求工具库
import Request from 'luch-request'
import { useUserStore } from '@/stores/user'

// 配置白名单(接口地址)
const whiteList = ['/login', '/code', '/login/password']

// 2. 创建一个请求实例对象
const request = new Request({
  // 配置基础路径
  baseURL: 'https://consult-api.itheima.net',
  custom: {
    loading: true
  }
})

// 3. 配置请求拦截器
request.interceptors.request.use((config) => { 
  
  // 3.0 统一携带token
  const store = useUserStore()
  if(store.user.token && !whiteList.includes(config.url!)){
     config.header!.Authorization = `Bearer ${store.user.token}`
  }
  

  // 3.1 开启加载loading
  if(config.custom?.loading){
    uni.showLoading({title: '正在加载中...', mask: true})
  }
  return config
}, (error) => {
  return Promise.reject(error)
})

// 4. 配置响应拦截器
request.interceptors.response.use((res) => {
  // 4.0 关闭加载loading
  uni.hideLoading()
  // 4.1 处理请求成功但业务失败
  if(res.data.code !== 10000){
    uni.showToast({
      title: res.data.message,
      icon: 'none'
    })
    return Promise.reject(res)
  }
  return res.data.data
}, (error) => {
  
  
  // 4.2 关闭加载loading
  uni.hideLoading()
  uni.showToast({
    title: error.data.message,
    icon: 'none'
  })

  // 4.1 判断token失效
  if(error.statusCode === 401){
    // 拦截到登录页面
    uni.redirectTo({ url: '/pages/login/index' })
  }
  
  return Promise.reject(error)
})


// 5. 导出请求实例对象
export { request }